package com.ldzy.webase.service;

import com.ldzy.webase.entity.Comment;
import com.ldzy.webase.entity.Press;
import com.ldzy.webase.entity.User;
import com.ldzy.webase.exception.ExceptionResponse;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.sql.Timestamp;
import java.util.List;

public interface UserService {
    // 登陆 (根据学号或者手机号登陆/两者取一)
    String loginByStudentIdOrPhoneNumber(User user) throws ExceptionResponse;

    // 注册 (成功返回1，否则返回0)
    int register(User user);

    // 根据学生uid获得密码
    String getPasswordByUid(Integer uid);

    // 根据学生uid查询最后登陆时间 (其一用途：用于验证登陆时间是否超过1天，否则需要重新登陆)
    Timestamp getEndLoginTimeByUid(Integer uid);

    // 根据学生uid修改最后登陆时间 (其一用途：用于验证登陆时间是否超过1天，否则需要重新登陆)
    int editEndLoginTimeByUid(String endLoginTime, Integer uid);

    // 根据学生token内的uid获取个人信息 (其一来源：uid来源于token)
    User getUserInfoByUid(Integer uid);

    // 根据学生uid修改个人基本信息 (其一来源：uid来源于token)
    int editUserInfoByUid(User user);

    // 查询用户所有已发布的咨询
    List<Press> getPressByUid(Integer uid);

    // 查询用户所有已发表的评论
    List<Comment> getCommentByUid(Integer uid);

    // 根据咨询pressId和用户uid，删除对应的咨询表t_press中的数据，删除对应的评论表，删除对应的咨询点赞表
    int delPressByPressIdAndUid(Integer pressId, Integer uid);

    // 根据评论commentId和用户uid，删除对应的评论表
    int delCommentByCommentIdAndUid(Integer commentId, Integer uid);

    // 根据咨询pressId和用户uid，编辑对应的咨询表t_press中的数据
    int editPressByPressIdAndUid(Press press);

    // 根据学生uid修改邮箱 (其一来源：uid来源于token)
    int editUserEmailByUid(User user);

    // 根据邮箱获取学生uid (其一来源：email来源于前端传参)
    String getUidByEmail(String email);

    // 根据学生uid修改密码 (其一来源：uid来源于token)
    int editPwdByUid(User user);

    // 根据学生uid、旧密码修改密码 (其一来源：uid来源于token)
    String editPwdByUidAndOldPassword(Integer uid, String newPassword, String oldPassword);
}
